对矢量可执行的其他操作

vector<Review>::iterator pr;
for(pr = books.begin(); pr != books.end; ++pr)
{
    ShowReview(*pr);
}

可替换为

    for_each(books.begin(); books.end(); ShowReview);// for_each可用于任何容器

Random_shuffle()函数可接受两个指定区间的迭代器参数,并随机排列该区间中的元素。

    random_shuffle(books.begin(), books.end());

sort()函数对区间中的元素进行排序

vector coolstuff; sort(coolstuff.begin(), coolstuff.end());

如果容器元素师用户定义的对象,则要使用sort(),必须定义能够处理该类型对象的operator<()函数。

例如,如果为Review提供了成员或非成员函数operator<(),则可以对包含Review对象的矢量进行排序。由于Review是一个结构,因此其成员是公有的,这样的非成员函数将为:

        bool operator<(const Review &r1, const Review &r2)
        {
                if(r1.title < r2.title)
                        return true;
                else if(ri.title == r2.title && ri.rating < r2.rating)
                        return true;
                else 
                        return false;
        }

有了这样的函数后,就可以对包含Review对象(如books)的矢量进行排序了:

    sort(books.begin(), books.end());

如果想按降序或是按rating(而不是title)排序,该如何办呢?可以使用另一种格式的sort()。它接受3个参数,前两个参数也是指定区间的迭代器,最后一个参数是指向要使用的函数的指针(函数或对象),而不是用于比较的operator<()。返回值可转换为bool,false表示两个参数的顺序不正确。

        bool WorseThan(const Review &r1, const Review &r2)
        {
                if(r1.rating < r2.rating)
                        return true;
                else
                        return false;
        }

有了这个函数后,就可以使用下面的语句将包含Review对象的books矢量按rating升序排列。

    sort(books.begin(), books.end(), WorseThan);

第一种排序称为全排序,第二种排序称为完整弱排序。